Page({
  data: {
    imagePath: '',                  // 原始图片路径
    watermarkedFilePath: '',        // 水印图片的本地文件路径
    watermarkText: '保密',          // 水印文本
    fontSize: 24,                   // 字体大小
    opacity: 0.5,                   // 透明度
    opacityPercent: '50%',          // 格式化后的透明度百分比
    angle: 30,                      // 旋转角度
    color: '#000000',               // 水印颜色
    space: 50,                      // 水印间距
    dpi: 300,                       // 图像分辨率
    loading: false,                 // 加载状态
    errorMsg: '',                   // 错误信息
    processingStep: 0,              // 处理步骤（用于进度显示）
    totalSteps: 4                   // 总处理步骤
  },

  // 选择图片
  chooseImage() {
    wx.chooseImage({
      count: 1,
      sizeType: ['original', 'compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        this.setData({ 
          imagePath: res.tempFilePaths[0],
          watermarkedFilePath: '',
          errorMsg: ''
        });
      },
      fail: (err) => {
        console.error('选择图片失败:', err);
        this.setData({ errorMsg: '选择图片失败' });
      }
    });
  },

  // 文本内容变更
  onTextChange(e) {
    this.setData({ watermarkText: e.detail.value });
  },

  // 字体大小变更
  onFontSizeChange(e) {
    this.setData({ fontSize: e.detail.value });
  },

  // 透明度变更
  onOpacityChange(e) {
    const opacity = parseFloat(e.detail.value);
    this.setData({ 
      opacity,
      opacityPercent: `${Math.round(opacity * 100)}%`
    });
  },

  // 旋转角度变更
  onAngleChange(e) {
    this.setData({ angle: parseInt(e.detail.value) });
  },

  // 颜色变更
  onColorChange(e) {
    this.setData({ color: e.detail.value });
  },

  // 间距变更
  onSpaceChange(e) {
    this.setData({ space: parseInt(e.detail.value) });
  },

  // 应用水印（调用API）
  applyWatermark() {
    if (!this.data.imagePath) {
      wx.showToast({ title: '请先选择图片', icon: 'none' });
      return;
    }

    this.setData({ 
      loading: true, 
      errorMsg: '',
      processingStep: 0
    });

    // 准备表单数据
    const formData = {
      text: this.data.watermarkText,
      size: this.data.fontSize,
      opacity: this.data.opacity,
      angle: this.data.angle,
      color: this.data.color.replace('#', ''),
      space: this.data.space,
      dpi: this.data.dpi
    };

    // 上传图片到API
    wx.uploadFile({
      filePath: this.data.imagePath,
      name: 'input_image',
      formData: formData,
      url: 'http://127.0.0.1:8080/watermark',
      success: (res) => {
        this.setData({ processingStep: 1 });
        
        if (res.statusCode === 200) {
          try {
            const result = JSON.parse(res.data);
            console.log('API返回结果:', result); // 关键日志，检查后端返回
            
            if (result.status === true && result.image_base64) {
              // 验证Base64数据有效性
              const base64Data = this._validateBase64(result.image_base64);
              if (!base64Data) {
                throw new Error('无效的Base64格式');
              }
              
              // 保存到临时文件
              this._saveToTempFile(base64Data);
            } else {
              throw new Error(result.message || 'API返回异常');
            }
          } catch (err) {
            console.error('处理API响应失败:', err);
            this.setData({ 
              errorMsg: '处理图片失败: ' + err.message,
              processingStep: 0
            });
          }
        } else {
          this.setData({ 
            errorMsg: `服务器返回错误: ${res.statusCode}`,
            processingStep: 0
          });
          console.error('HTTP错误:', res);
        }
      },
      fail: (err) => {
        this.setData({ 
          errorMsg: '网络请求失败',
          processingStep: 0
        });
        console.error('上传失败:', err);
      },
      complete: () => {
        this.setData({ loading: false });
      }
    });
  },

  // 验证并处理Base64数据
  _validateBase64(base64Str) {
    // 确保有正确的前缀
    if (base64Str.startsWith('data:image/')) {
      return base64Str.split(',')[1];
    }
    
    // 检查是否是不带前缀的纯Base64
    if (/^[A-Za-z0-9+/=]+$/.test(base64Str)) {
      return base64Str;
    }
    
    console.error('无效的Base64格式:', base64Str.substring(0, 100) + '...');
    return null;
  },

  // 保存Base64到临时文件
  _saveToTempFile(base64Data) {
    const filePath = wx.env.USER_DATA_PATH + '/watermarked_' + Date.now() + '.jpg';
    
    wx.getFileSystemManager().writeFile({
      filePath: filePath,
      data: base64Data,
      encoding: 'base64',
      success: () => {
        this.setData({ 
          watermarkedFilePath: filePath,
          processingStep: 2
        }, () => {
          // 验证文件是否可正常打开
          this._verifyImageFile(filePath);
        });
      },
      fail: (err) => {
        console.error('写入文件失败:', err);
        this.setData({ 
          errorMsg: '保存图片失败',
          processingStep: 0
        });
      }
    });
  },

  // 验证图片文件是否有效
  _verifyImageFile(filePath) {
    // 尝试获取图片信息
    wx.getImageInfo({
      src: filePath,
      success: () => {
        this.setData({ processingStep: 3 });
        wx.showToast({ title: '水印添加成功' });
      },
      fail: (err) => {
        console.error('图片验证失败:', err);
        this.setData({ 
          errorMsg: '生成的图片无效，请重试',
          processingStep: 0
        });
      }
    });
  },

  // 保存图片
  saveImage() {
    if (!this.data.watermarkedFilePath) {
      wx.showToast({ title: '请先生成水印图片', icon: 'none' });
      return;
    }

    // 检查文件是否存在
    try {
      wx.getFileSystemManager().accessSync(this.data.watermarkedFilePath);
    } catch (err) {
      console.error('文件不存在:', err);
      wx.showToast({ title: '图片已过期，请重新生成', icon: 'none' });
      return;
    }

    // 检查相册权限
    wx.getSetting({
      success: (res) => {
        if (!res.authSetting['scope.writePhotosAlbum']) {
          wx.authorize({
            scope: 'scope.writePhotosAlbum',
            success: () => {
              this._saveImageToAlbum();
            },
            fail: () => {
              wx.showModal({
                title: '权限申请',
                content: '需要相册权限才能保存图片',
                success: (res) => {
                  if (res.confirm) {
                    wx.openSetting();
                  }
                }
              });
            }
          });
        } else {
          this._saveImageToAlbum();
        }
      }
    });
  },

  // 实际保存图片到相册
  _saveImageToAlbum() {
    const filePath = this.data.watermarkedFilePath;
    
    // 直接保存临时文件到相册
    wx.saveImageToPhotosAlbum({
      filePath: filePath,
      success: () => {
        wx.showToast({ title: '保存成功' });
      },
      fail: (err) => {
        console.error('保存失败:', err);
        
        if (err.errMsg.includes('auth deny')) {
          wx.openSetting({
            success: (res) => {
              if (res.authSetting['scope.writePhotosAlbum']) {
                this._saveImageToAlbum(); // 重新尝试保存
              }
            }
          });
        } else if (err.errMsg.includes('function not implemented')) {
          // 兼容低版本微信
          this._saveImageFallback(filePath);
        } else {
          wx.showToast({ title: '保存失败', icon: 'none' });
        }
      }
    });
  },

  // 备用保存方案（针对不支持 saveImageToPhotosAlbum 的情况）
  _saveImageFallback(filePath) {
    wx.showModal({
      title: '保存失败',
      content: '当前版本微信不支持直接保存，请点击确定复制图片路径，然后到相册中手动粘贴',
      confirmText: '复制路径',
      success: (res) => {
        if (res.confirm) {
          wx.setClipboardData({
            data: filePath,
            success: () => {
              wx.showToast({ title: '路径已复制' });
            }
          });
        }
      }
    });
  }
});